package file

import (
	"io"
	"os"
	"path/filepath"
	"strings"
	config "testCode/kratos_config_load"
)

type file struct {
	path string
}

func (f *file) loadFile(path string) (*config.KeyValue, error) {
	file, err := os.Open(path)
	if err != nil {
		return nil, err
	}
	defer file.Close()

	data, err := io.ReadAll(file)
	if err != nil {
		return nil, err
	}

	// file.Stat() 可以获取文件的属性，文件名、文件大小等
	info, err := file.Stat()
	if err != nil {
		return nil, err
	}

	return &config.KeyValue{
		Key:    info.Name(),
		Format: format(info.Name()), // format 方法用于得到文件的后缀 比如 config.yaml 返回 yaml
		Value:  data,
	}, nil
}

func (f *file) loadDir(path string) (kvs []*config.KeyValue, err error) {
	files, err := os.ReadDir(path)
	if err != nil {
		return nil, err
	}
	for _, file := range files {
		// ignore hidden files
		if file.IsDir() || strings.HasPrefix(file.Name(), ".") {
			continue
		}
		kv, err := f.loadFile(filepath.Join(path, file.Name()))
		if err != nil {
			return nil, err
		}
		kvs = append(kvs, kv)
	}
	return
}

func format(filename string) string {
	ext := filepath.Ext(filename)       // 得到文件后缀，比如 ".json"
	return strings.TrimPrefix(ext, ".") // 去掉点，返回 "json"
}
